package main

import (
	"fmt"
	"unsafe"
)

/*
	全局变量定义方式
*/
var (
	int1  = 1
	char2 = 'a'
	str3  = "hello"
)

/*
	局部变量
*/
var str1, str2 = "a", "b"
var str4 string

/*
	未初始化的变量
*/
var i *int
var array []int
var m map[string]int
var c chan int
var fun func(string) int
var inter error // error 是接口

/*
	定义常量
*/

const str5 = "这是一个常量， 不允许改变值。"

const (
	const1 = "const string"
	const2 = len(const1)
	const3 = unsafe.Sizeof(const1)
	/* iota特殊常量，一个可以被编译器修改的常量*/
	const4 = iota
)

func main() {

	fmt.Println("全局变量")
	fmt.Printf("int1, char2, str3 三个值分别为 %d, %c, %s", int1, char2, str3)
	fmt.Println()
	fmt.Println()

	fmt.Println("局部变量")
	fmt.Printf("str1, str2 两个值分别为 %s, %s", str1, str2)
	fmt.Println()
	fmt.Println("数字类型未初始化是0，字符是空，布尔是false， 一下是nil")

	fmt.Println("*int - ", i)
	fmt.Println("array - ", array)
	fmt.Println("m - ", m)
	fmt.Println("c - ", c)
	fmt.Println("fun - ", fun)
	fmt.Println("inter - ", inter)
	fmt.Printf("str4 未初始化为 %s", str4)
	fmt.Println()
	str4 = "d"
	fmt.Printf("str4 重新赋值为 %s", str4)
	fmt.Println()
	fmt.Println("常量str5是：" + str5)
	fmt.Println("const1 的值是 ", const1)
	fmt.Println("const2 的值是 ", const2)
	fmt.Println("const3 的值是 ", const3)

}
